1 package org.saf.struts.config; 2 3 import org.apache.commons.digester.Digester; 4 5 import org.saf.struts.bean.AuthorizationAction; 6 import org.saf.struts.bean.AuthorizationDefinition; 7 import org.saf.struts.bean.AuthorizationErrorForward; 8 import org.saf.struts.bean.AuthorizationManager; 9 import org.saf.struts.bean.AuthorizationMethod; 10 import org.saf.struts.bean.AuthorizationPutDefinition; 11 12 import org.xml.sax.InputSource; 13 14 import java.io.IOException; 15 16 import java.util.Collection; 17 import java.util.HashMap; 18 import java.util.Iterator; 19 import java.util.Map; 20 21 22 public class StrutsAuthorizationConfig { 23 private AuthorizationErrorForward authorizationErrorForward; 24 private AuthorizationManager authorizationManager; 25 private Map authorizationActionMap; 26 private Map authorizationDefinitionMap; 27 private Map authorizationErrorForwardMap; 28 29 /*** 30 * Creates a new StrutsAuthorizationConfig 31 */ 32 public StrutsAuthorizationConfig() { 33 authorizationActionMap = new HashMap(); 34 authorizationDefinitionMap = new HashMap(); 35 } 36 37 /*** 38 * @return Returns the authorizationActionMap. 39 */ 40 public Map getAuthorizationActionMap() { 41 return authorizationActionMap; 42 } 43 44 /*** 45 * @return Returns the authorizationDefinitionMap. 46 */ 47 public Map getAuthorizationDefinitionMap() { 48 return authorizationDefinitionMap; 49 } 50 51 /*** 52 * @param authorizationErrorForward The authorizationErrorForward to set. 53 */ 54 public void setAuthorizationErrorForward( 55 AuthorizationErrorForward authorizationErrorForward) { 56 this.authorizationErrorForward = authorizationErrorForward; 57 } 58 59 /*** 60 * @return Returns the authorizationErrorForward. 61 */ 62 public AuthorizationErrorForward getAuthorizationErrorForward() { 63 return authorizationErrorForward; 64 } 65 66 /*** 67 * @return Returns the authorizationErrorForwardMap. 68 */ 69 public Map getAuthorizationErrorForwardMap() { 70 return authorizationErrorForwardMap; 71 } 72 73 /*** 74 * @param authorizationManager The authorizationManager to set. 75 */ 76 public void setAuthorizationManager( 77 AuthorizationManager authorizationManager) { 78 this.authorizationManager = authorizationManager; 79 } 80 81 /*** 82 * @return Returns the authorizationManager. 83 */ 84 public AuthorizationManager getAuthorizationManager() { 85 return authorizationManager; 86 } 87 88 public void addAuthorizationAction(AuthorizationAction action) { 89 if (authorizationActionMap == null) { 90 authorizationActionMap = new HashMap(); 91 } 92 93 authorizationActionMap.put(action.getType(), action); 94 } 95 96 public void addAuthorizationDefinition(AuthorizationDefinition definition) { 97 if (authorizationDefinitionMap == null) { 98 authorizationDefinitionMap = new HashMap(); 99 } 100 101 authorizationDefinitionMap.put(definition.getRefId(), definition); 102 } 103 104 public void addAuthorizationErrorForward(AuthorizationErrorForward forward) { 105 if (authorizationErrorForwardMap == null) { 106 authorizationErrorForwardMap = new HashMap(); 107 } 108 109 authorizationErrorForwardMap.put(forward.getRefId(), forward); 110 } 111 112 public void readConfig(InputSource is) throws IOException { 113 Digester digester = new Digester(); 114 115 digester.push(this); 116 117 digester.addObjectCreate("struts-authorization/authorization-manager", 118 AuthorizationManager.class); 119 digester.addSetProperties("struts-authorization/authorization-manager"); 120 digester.addSetNext("struts-authorization/authorization-manager", 121 "setAuthorizationManager"); 122 123 digester.addObjectCreate("struts-authorization/authorization-error-forwards/error-forward", 124 AuthorizationErrorForward.class); 125 digester.addSetProperties( 126 "struts-authorization/authorization-error-forwards/error-forward"); 127 digester.addSetNext("struts-authorization/authorization-error-forwards/error-forward", 128 "addAuthorizationErrorForward"); 129 130 digester.addObjectCreate("struts-authorization/authorization-default-error-forward/error-forward", 131 AuthorizationErrorForward.class); 132 digester.addSetProperties( 133 "struts-authorization/authorization-default-error-forward/error-forward"); 134 digester.addSetNext("struts-authorization/authorization-default-error-forward/error-forward", 135 "setAuthorizationErrorForward"); 136 137 digester.addObjectCreate("struts-authorization/authorization-definition/definition", 138 AuthorizationDefinition.class); 139 digester.addSetProperties( 140 "struts-authorization/authorization-definition/definition"); 141 digester.addSetProperties("struts-authorization/authorization-definition/definition", 142 "extends", "extendsAuthorizationDefinitionId"); 143 digester.addObjectCreate("struts-authorization/authorization-definition/definition/put", 144 AuthorizationPutDefinition.class); 145 digester.addSetProperties( 146 "struts-authorization/authorization-definition/definition/put"); 147 digester.addSetNext("struts-authorization/authorization-definition/definition/put", 148 "addDefinition"); 149 digester.addSetNext("struts-authorization/authorization-definition/definition", 150 "addAuthorizationDefinition"); 151 152 digester.addObjectCreate("struts-authorization/authorization-actions/action", 153 AuthorizationAction.class); 154 digester.addSetProperties( 155 "struts-authorization/authorization-actions/action"); 156 digester.addSetProperties("struts-authorization/authorization-actions/action", 157 "defId", "authorizationDefinitionId"); 158 digester.addSetProperties("struts-authorization/authorization-actions/action", 159 "errorForwardId", "authorizationErrorForwardId"); 160 digester.addObjectCreate("struts-authorization/authorization-actions/action/action-method", 161 AuthorizationMethod.class); 162 digester.addSetProperties( 163 "struts-authorization/authorization-actions/action/action-method"); 164 digester.addSetProperties("struts-authorization/authorization-actions/action/action-method", 165 "defId", "authorizationDefinitionId"); 166 digester.addSetProperties("struts-authorization/authorization-actions/action/action-method", 167 "errorForwardId", "authorizationErrorForwardId"); 168 digester.addSetNext("struts-authorization/authorization-actions/action/action-method", 169 "addAuthorizationMethod"); 170 digester.addSetNext("struts-authorization/authorization-actions/action", 171 "addAuthorizationAction"); 172 173 try { 174 digester.parse(is); 175 modifyAuthorizationDefinitionMap(); 176 } catch (Exception ex) { 177 throw new IOException(ex.getMessage()); 178 } 179 } 180 181 private AuthorizationDefinition getAuthorizationDefinitionList( 182 AuthorizationDefinition authorizationDefinition, 183 AuthorizationDefinition mainAuthorizationDefinition) { 184 if ((mainAuthorizationDefinition != null) && 185 (mainAuthorizationDefinition.getDefinitionMap() != null)) { 186 authorizationDefinition.addAllDefinitions(mainAuthorizationDefinition.getDefinitionMap()); 187 } 188 189 if ((mainAuthorizationDefinition != null) && 190 (mainAuthorizationDefinition.getExtendsAuthorizationDefinitionId() != null)) { 191 mainAuthorizationDefinition = (AuthorizationDefinition) authorizationDefinitionMap.get(mainAuthorizationDefinition.getExtendsAuthorizationDefinitionId()); 192 authorizationDefinition = getAuthorizationDefinitionList(authorizationDefinition, 193 mainAuthorizationDefinition); 194 } 195 196 return authorizationDefinition; 197 } 198 199 private void modifyAuthorizationDefinitionMap() { 200 if (authorizationDefinitionMap != null) { 201 Collection authorizationDefinitionIdList = authorizationDefinitionMap.keySet(); 202 203 for (Iterator iter = authorizationDefinitionIdList.iterator(); 204 iter.hasNext();) { 205 String authorizationDefinitionId = (String) iter.next(); 206 AuthorizationDefinition authorizationDefinition = (AuthorizationDefinition) authorizationDefinitionMap.get(authorizationDefinitionId); 207 208 if (authorizationDefinition.getExtendsAuthorizationDefinitionId() != null) { 209 AuthorizationDefinition mainAuthorizationDefinition = (AuthorizationDefinition) authorizationDefinitionMap.get(authorizationDefinition.getExtendsAuthorizationDefinitionId()); 210 authorizationDefinition = getAuthorizationDefinitionList(authorizationDefinition, 211 mainAuthorizationDefinition); 212 authorizationDefinitionMap.put(authorizationDefinition.getRefId(), 213 authorizationDefinition); 214 } 215 } 216 } 217 } 218 }